package com.barunlab.ems.server.sms.user;

import java.rmi.RemoteException;
import java.util.ArrayList;

import org.apache.log4j.Logger;

import com.barunlab.ems.constants.ResultType;
import com.barunlab.ems.model.EmsRequest;
import com.barunlab.ems.model.EmsResponse;
import com.barunlab.ems.model.EmsResult;
import com.barunlab.ems.model.UserInfo;

/**
 * 운용자 정보를 관리하는 클래스
 * 
 * @author 배수현
 * @version SKT SI R1.0
 * @since JDK6.0
 * @created 2013
 */
public class UserService {
	private static Logger LOGGER = Logger.getLogger(UserService.class);

	/**
	 * 로그인 요청을 처리한다.
	 * @param request 요청 정보
	 * @return 처리 결과
	 * @throws RemoteException
	 */
	public static synchronized EmsResponse login(EmsRequest request) throws RemoteException {
		Object[] requestParams = request.getRequestParams();
		
		UserInfo userInfo = null;
		if ( requestParams[0] instanceof UserInfo ) {
			userInfo = (UserInfo)requestParams[0];
		}
		else {
			throw new RemoteException("첫번째 파라미터는 UserInfo 객체여야 합니다.");
		}
		
		LOGGER.debug(String.format("login id:%s, password:%s", userInfo.getId(), userInfo.getPassword()));

		EmsResult result = new EmsResult();

		UserDao userDao = new UserDao();
		ArrayList<UserInfo> userList = userDao.list(userInfo);

		if ( userList.size() > 0 ) {
			result.setType(ResultType.SUCCESS);
		}
		
		EmsResponse response = new EmsResponse(request, result);
		
		return response;
	}
	
	/**
	 * 로그아웃 요청을 처리한다.
	 * @param request 요청 정보
	 * @return 처리 결과
	 * @throws RemoteException
	 */
	public static synchronized EmsResponse logout(EmsRequest request) throws RemoteException {
		Object[] requestParams = request.getRequestParams();
		
		String userId = null;
		if ( requestParams[0] instanceof String ) {
			userId = (String)requestParams[0];
		}
		else {
			throw new RemoteException("첫번째 파라미터는 String 객체여야 합니다.");
		}
		
		LOGGER.debug(String.format("logout:%s", userId));
		
		EmsResult result = new EmsResult();
		result.setType(ResultType.SUCCESS);
		
		EmsResponse response = new EmsResponse(request, result);
		
		return response;
	}
	
	/**
	 * 운용자 정보를 반환한다.
	 * @return 운용자 정보
	 */
	public static EmsResponse getUserInfo(EmsRequest request) throws RemoteException {
		Object[] requestParams = request.getRequestParams();
		
		UserInfo userInfo = null;
		if ( requestParams[0] instanceof UserInfo ) {
			userInfo = (UserInfo)requestParams[0];
		}
		else {
			throw new RemoteException("첫번째 파라미터는 UserInfo 객체여야 합니다.");
		}
		
		LOGGER.debug(String.format("getUserInfo"));
		
		UserDao userDao = new UserDao();
		ArrayList<UserInfo> userList = userDao.list(userInfo);
		
		EmsResult result = new EmsResult();
		result.setType(ResultType.SUCCESS);
		
		Object[] params = new Object[1];
		params[0] = userList;
		
		result.setParams(params);
		
		EmsResponse response = new EmsResponse(request, result);
		
		return response;
	}
	
	/**
	 * 운용자 정보를 변경한다.
	 * 
	 * @param userId
	 * @param userGroup
	 * @throws Exception
	 */
	public static void changeUserInfo(UserInfo userInfo) throws Exception {
	}
}
